/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.jjsoft.celularessuc.gco.neg;

import com.jjsoft.celularessuc.gco.mdl.Articulo;
import com.jjsoft.celularessuc.gco.mdl.Configuracion;
import com.jjsoft.celularessuc.gco.mdl.Detallefactura;
import com.jjsoft.celularessuc.gco.mdl.Detalleproforma;
import com.jjsoft.celularessuc.gco.mdl.DeudaClienteAbono;
import com.jjsoft.celularessuc.gco.mdl.Factura;
import com.jjsoft.celularessuc.gco.mdl.Gasto;
import com.jjsoft.celularessuc.gco.mdl.Ingreso;
import com.jjsoft.celularessuc.gco.mdl.Proforma;
import com.jjsoft.celularessuc.gco.mdl.Serviciotecnico;
import com.jjsoft.celularessuc.gco.mdl.Sucursal;
import com.jjsoft.celularessuc.gco.mdl.Transferencia;
import com.jjsoft.celularessuc.gco.util.CNumeros;
import com.jjsoft.celularessuc.gco.util.configuraciones;
import com.jjsoft.celularessuc.gco.util.printObject;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.AttributeSet;
import javax.print.attribute.HashAttributeSet;
import javax.swing.JOptionPane;

/**
 *
 * @author Johnny
 */
public class CImprimir {

    public void imprimirFactura(Factura fact) {
        DocFlavor docFormat = DocFlavor.SERVICE_FORMATTED.PRINTABLE;

        Doc document = new SimpleDoc(new printObject(fact), docFormat, null);

        String printerName = configuraciones.getInstance().getConfiguracion().getImpresoraFactura();

        PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
        int impr = 0;
        boolean existe = false;
        for (int i = 0; i < services.length; i++) {
            if (services[i].getName().equals(printerName)) {
                impr = i;
                existe = true;
            }
        }
        if (existe) {
            DocPrintJob printJob = services[impr].createPrintJob();
            try {
                printJob.print(document, null);
                System.out.print("imprimiendo en " + services[impr]);
            } catch (PrintException ex) {
                Logger.getLogger(CImprimir.class.getName()).log(Level.SEVERE, null, ex);
                ex.printStackTrace();
            }
        } else {
            JOptionPane.showMessageDialog(null, "No esta instalada la impresora seleccionada para la impresion. \n Por favor revise la impresora en las configuraciones");
        }
    }

    public void imprimirProforma(Proforma prof) {
        DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
        PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
        int impr = 0;
        boolean existe = false;
        for (int i = 0; i < services.length; i++) {
            if (services[i].getName().equals(configuraciones.getInstance().getConfiguracion().getImpresoraProforma())) {
                impr = i;
                existe = true;
            }
        }
        if (existe) {
            String ss = "========= EGRESO DE MERCADERIA =========";
            String num = AgregaEspacios("Numero: " + String.valueOf(prof.getNumero()));
            ss = ss + num;
            String local = AgregaEspacios(configuraciones.getInstance().getConfiguracion().getNombreLocal());
            ss = ss + local;
            String propietario = AgregaEspacios(configuraciones.getInstance().getConfiguracion().getNombreDuenio());
            ss = ss + propietario;
            String ruc = AgregaEspacios("RUC:" + configuraciones.getInstance().getConfiguracion().getRuc());
            ss = ss + ruc;
            String direccion = completaLineas("Direccion:" + configuraciones.getInstance().getConfiguracion().getDireccion());
            ss = ss + direccion;
            String telefono = AgregaEspacios("Telefono:" + configuraciones.getInstance().getConfiguracion().getTelefono());
            ss = ss + telefono;
            String fecha = AgregaEspacios("Fecha:" + prof.getFechaEmision().toLocaleString());
            ss = ss + fecha;
            String cliente = completaLineas("Cliente:" + prof.getCedulaCliente().getNombres() + " " + prof.getCedulaCliente().getApellidos());
            ss = ss + cliente;
            String ci = AgregaEspacios("CI/RUC:" + prof.getCedulaCliente().getCedula());
            ss = ss + ci;
            ss = ss + "----------------------------------------";
            ss = ss + "CANT  DESC                       V.VENTA";
            ss = ss + obtenDetalle(prof);
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "FIRMA__________________________________ ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                       .\f";

            byte[] bytes = ss.getBytes();
            DocPrintJob printJob = services[impr].createPrintJob();
            Doc doc = new SimpleDoc(bytes, flavor, null);
            try {
                printJob.print(doc, null);
                System.out.print("imprimiendo en " + services[impr]);
            } catch (PrintException ex) {
                Logger.getLogger(CImprimir.class.getName()).log(Level.SEVERE, null, ex);
                ex.printStackTrace();
            }
        } else {
            JOptionPane.showMessageDialog(null, "No esta instalada la impresora seleccionada para la impresion. \n Por favor revise la impresora en las configuraciones");
        }
    }

    public void imprimirCierreDeCaja() {
        IngresoManager im = new IngresoManager();
        GastoManager gm = new GastoManager();
        List<Ingreso> ingresos = im.listarIngresos(new Date(), configuraciones.getInstance().getUsuario());
        List<Gasto> gastos = gm.listarGastos(new Date(), configuraciones.getInstance().getUsuario());
        double valorIngresos=0;
        double valorGastos=0;
        
        for(Ingreso ingreso:ingresos)
        {
            valorIngresos+=ingreso.getValor();
        
        }
        for(Gasto gasto:gastos)
        {
            valorGastos+=gasto.getValor();
        }
        
        DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
        PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
        int impr = 0;
        boolean existe = false;
        for (int i = 0; i < services.length; i++) {
            if (services[i].getName().equals(configuraciones.getInstance().getConfiguracion().getImpresoraProforma())) {
                impr = i;
                existe = true;
            }
        }
        if (existe) {
            String ss = "============ CIERRE DE CAJA ============";
            String fecha = AgregaEspacios("FECHA: " + new Date().toLocaleString());
            ss = ss + fecha;
            String local = AgregaEspacios(configuraciones.getInstance().getConfiguracion().getNombreLocal());
            ss = ss + local;
            String propietario = AgregaEspacios(configuraciones.getInstance().getConfiguracion().getNombreDuenio());
            ss = ss + propietario;
            String numIngresos = AgregaEspacios("NUM. INGRESOS: " + String.valueOf(ingresos.size()));
            ss = ss + numIngresos;
            String totalIngresos = AgregaEspacios("T.INGRESOS: " + CNumeros.Formato(valorIngresos));
            ss = ss + totalIngresos;
            String numEgresos = AgregaEspacios("NUM. EGRESOS: " + String.valueOf(gastos.size()));
            ss = ss + numEgresos;
            String totalEgresos = AgregaEspacios("T. EGRESOS: " + CNumeros.Formato(valorGastos));
            ss = ss + totalEgresos;
            String totalCaja=AgregaEspacios("TOTAL CAJA: "+CNumeros.Formato(valorIngresos-valorGastos));
            ss = ss+ totalCaja;
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "FIRMA__________________________________ ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                       .\f";

            byte[] bytes = ss.getBytes();
            DocPrintJob printJob = services[impr].createPrintJob();
            Doc doc = new SimpleDoc(bytes, flavor, null);
            try {
                printJob.print(doc, null);
                System.out.print("imprimiendo en " + services[impr]);
            } catch (PrintException ex) {
                Logger.getLogger(CImprimir.class.getName()).log(Level.SEVERE, null, ex);
                ex.printStackTrace();
            }
        } else {
            JOptionPane.showMessageDialog(null, "No esta instalada la impresora seleccionada para la impresion. \n Por favor revise la impresora en las configuraciones");
        }
    }

    public void imprimirTransferencia(List<Detallefactura> listadetalle, Sucursal origen, Sucursal destino, Transferencia transferencia) {
        DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
        PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
        int impr = 0;
        boolean existe = false;
        for (int i = 0; i < services.length; i++) {
            if (services[i].getName().equals(configuraciones.getInstance().getConfiguracion().getImpresoraProforma())) {
                impr = i;
                existe = true;
            }
        }
        if (existe) {
            String ss = "======= DETALLE DE TRANSFERENCIA =======";
            String local = AgregaEspacios(configuraciones.getInstance().getConfiguracion().getNombreLocal());
            ss = ss + local;
            String propietario = AgregaEspacios(configuraciones.getInstance().getConfiguracion().getNombreDuenio());
            ss = ss + propietario;
            String ruc = AgregaEspacios("RUC:" + configuraciones.getInstance().getConfiguracion().getRuc());
            ss = ss + ruc;
            String direccion = completaLineas("Direccion:" + configuraciones.getInstance().getConfiguracion().getDireccion());
            ss = ss + direccion;
            String telefono = AgregaEspacios("Telefono:" + configuraciones.getInstance().getConfiguracion().getTelefono());
            ss = ss + telefono;
            String numero = AgregaEspacios("Numero:" + transferencia.getIdTransferencia());
            ss = ss + numero;
            String fecha = AgregaEspacios("Fecha:" + new Date().toLocaleString());
            ss = ss + fecha;
            String ori = completaLineas("Origen:" + origen.getNombre());
            ss = ss + ori;
            String des = AgregaEspacios("Destino:" + destino.getNombre());
            ss = ss + des;
            ss = ss + "----------------------------------------";
            ss = ss + "CANT  DESC                              ";
            ss = ss + obtenDetalle(listadetalle);
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "FIRMA__________________________________ ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                       .\f";

            byte[] bytes = ss.getBytes();
            DocPrintJob printJob = services[impr].createPrintJob();
            Doc doc = new SimpleDoc(bytes, flavor, null);
            try {
                printJob.print(doc, null);
                System.out.print("imprimiendo en " + services[impr]);
            } catch (PrintException ex) {
                Logger.getLogger(CImprimir.class.getName()).log(Level.SEVERE, null, ex);
                ex.printStackTrace();
            }
        } else {
            JOptionPane.showMessageDialog(null, "No esta instalada la impresora seleccionada para la impresion. \n Por favor revise la impresora en las configuraciones");
        }
    }

    public String AgregaEspacios(String cadena) {
        for (int i = cadena.length(); i < 40; i++) {
            cadena = cadena + " ";
        }
        if (cadena.length() > 40) {
            cadena = cadena.substring(0, 39);
        }
        return cadena;
    }

    public String AgregaEspaciosDelante(String cadena) {
        for (int i = cadena.length(); i < 40; i++) {
            cadena = " " + cadena;
        }
        if (cadena.length() > 40) {
            cadena = cadena.substring(0, 40);
        }
        return cadena;
    }

    public String AgregaNEspacios(String cadena, int espacios) {
        for (int i = 0; i < espacios; i++) {
            cadena = cadena + " ";
        }
        return cadena;
    }

    public String obtenDetalle(Proforma prof) {
        String detalle = "";
        for (int i = 0; i < prof.getDetalleproformaList().size(); i++) {
            String articulo = "";
            String cant = String.valueOf(((Detalleproforma) prof.getDetalleproformaList().get(i)).getCantidad().intValue());
            cant = AgregaNEspacios(cant, 6 - cant.length());
            articulo = articulo + cant;
            String desc = prof.getDetalleproformaList().get(i).getIdArticulo().getDescripcion() + " " + prof.getDetalleproformaList().get(i).getIdArticulo().getMarca() + " " + prof.getDetalleproformaList().get(i).getIdArticulo().getModelo();
            if (desc.length() < 25) {
                desc = AgregaNEspacios(desc, 27 - desc.length());
            } else {
                desc = prof.getDetalleproformaList().get(i).getIdArticulo().getDescripcion().substring(0, 3).toUpperCase() + " " + prof.getDetalleproformaList().get(i).getIdArticulo().getMarca().substring(0, 3).toUpperCase() + " " + prof.getDetalleproformaList().get(i).getIdArticulo().getModelo().toUpperCase();
                desc = AgregaNEspacios(desc, 27 - desc.length());
            }
            articulo = articulo + desc;
            String valor = CNumeros.Formato(((Detalleproforma) prof.getDetalleproformaList().get(i)).getCantidad().intValue() * ((Detalleproforma) prof.getDetalleproformaList().get(i)).getPrecioVenta().doubleValue());
            valor = AgregaNEspacios(valor, 7 - valor.length());
            articulo = articulo + valor;
            if ((((Detalleproforma) prof.getDetalleproformaList().get(i)).getSerie() != null) && (((Detalleproforma) prof.getDetalleproformaList().get(i)).getSerie().length() > 0)) {
                articulo = articulo + "      SN:" + AgregaNEspacios(((Detalleproforma) prof.getDetalleproformaList().get(i)).getSerie(), 31 - ((Detalleproforma) prof.getDetalleproformaList().get(i)).getSerie().length());
            }
            detalle = detalle + articulo;
        }
        detalle = detalle + "----------------------------------------";
        double subt = (prof.getDescuento().doubleValue() / 100.0D + 1.0D) * prof.getTotal().doubleValue() - prof.getIva().doubleValue();
        double descuento = subt * prof.getDescuento().doubleValue();
        String subtotal = AgregaEspaciosDelante("Subtotal: " + CNumeros.Formato(subt));
        detalle = detalle + subtotal;
        String desc = AgregaEspaciosDelante("Descuento: " + CNumeros.Formato(descuento));
        detalle = detalle + desc;
        String iva = AgregaEspaciosDelante("IVA: " + CNumeros.Formato(prof.getIva().doubleValue()));
        detalle = detalle + iva;
        String total = AgregaEspaciosDelante("Total: " + CNumeros.Formato(prof.getTotal().doubleValue()));
        detalle = detalle + total;

        return detalle;
    }

    public String obtenDetalle(List<Detallefactura> listadetalle) {
        String detalle = "";
        for (int i = 0; i < listadetalle.size(); i++) {
            String articulo = "";
            String cant = String.valueOf((listadetalle.get(i)).getCantidad().intValue());
            cant = AgregaNEspacios(cant, 6 - cant.length());
            articulo = articulo + cant;
            String desc = listadetalle.get(i).getIdArticulo().getDescripcion() + " " + listadetalle.get(i).getIdArticulo().getMarca() + " " + listadetalle.get(i).getIdArticulo().getModelo();
            if (desc.length() < 32) {
                desc = AgregaNEspacios(desc, 34 - desc.length());
            } else {
                desc = listadetalle.get(i).getIdArticulo().getDescripcion().substring(0, 3).toUpperCase() + " " + listadetalle.get(i).getIdArticulo().getMarca().substring(0, 3).toUpperCase() + " " + listadetalle.get(i).getIdArticulo().getModelo().toUpperCase();
                desc = AgregaNEspacios(desc, 34 - desc.length());
            }
            articulo = articulo + desc;
            if (((listadetalle.get(i)).getSerie() != null) && ((listadetalle.get(i)).getSerie().length() > 0)) {
                articulo = articulo + "      SN:" + AgregaNEspacios((listadetalle.get(i)).getSerie(), 31 - (listadetalle.get(i)).getSerie().length());
            }
            detalle = detalle + articulo;
        }
        detalle = detalle + "----------------------------------------";
        return detalle;
    }

    public void imprimirComprobantePagoDeuda(DeudaClienteAbono pago) {
        DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
        PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
        int impr = 0;
        boolean existe = false;
        for (int i = 0; i < services.length; i++) {
            if (services[i].getName().equals(configuraciones.getInstance().getConfiguracion().getImpresoraProforma())) {
                impr = i;
                existe = true;
            }
        }
        if (existe) {
            String ss = "===== COMPROBANTE DE PAGO DE DEUDA  ====";
            String num = AgregaEspacios("Codigo: " + String.valueOf(pago.getIdAbono()));
            ss = ss + num;
            String local = AgregaEspacios(configuraciones.getInstance().getConfiguracion().getNombreLocal());
            ss = ss + local;
            String propietario = AgregaEspacios(configuraciones.getInstance().getConfiguracion().getNombreDuenio());
            ss = ss + propietario;
            String ruc = AgregaEspacios("RUC:" + configuraciones.getInstance().getConfiguracion().getRuc());
            ss = ss + ruc;
            String direccion = completaLineas("Direccion:" + configuraciones.getInstance().getConfiguracion().getDireccion());
            ss = ss + direccion;
            String telefono = AgregaEspacios("Telefono:" + configuraciones.getInstance().getConfiguracion().getTelefono());
            ss = ss + telefono;
            String fecha = AgregaEspacios("Fecha:" + pago.getFecha());
            ss = ss + fecha;
            String cliente = completaLineas("Cliente:" + pago.getIdDeuda().getCedulaCliente().getNombres() + " " + pago.getIdDeuda().getCedulaCliente().getApellidos());
            ss = ss + cliente;
            String ci = AgregaEspacios("CI/RUC:" + pago.getIdDeuda().getCedulaCliente().getCedula());
            ss = ss + ci;
            String telefonoCliente = AgregaEspacios("Telefono:" + pago.getIdDeuda().getCedulaCliente().getTelefono());
            ss = ss + telefonoCliente;
            ss = ss + "----------------------------------------";
            String concepto = completaLineas("Concepto: " + pago.getIdDeuda().getConcepto().trim());
            ss = ss + concepto;
            String descripcion = completaLineas("Descripcion: " + pago.getDescripcion().trim());
            ss = ss + descripcion;
            String abono = AgregaEspacios("V.Pagado: " + CNumeros.Formato(pago.getAbono()));
            ss = ss + abono;
            String saldo = AgregaEspacios("Saldo: " + CNumeros.Formato(pago.getIdDeuda().getSaldoActual()));
            ss = ss + saldo;
            if (pago.getIdDeuda().getFechaVencimiento() != null) {
                String fVencimiento = AgregaEspacios("F. Vencimiento: " + pago.getIdDeuda().getFechaVencimiento().toLocaleString().split(" ")[0]);
                ss = ss + fVencimiento;
            }
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "Firma_________________________________  ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                       .\f";
            ss = ss.trim();
            byte[] bytes = ss.getBytes();
            DocPrintJob printJob = services[impr].createPrintJob();
            Doc doc = new SimpleDoc(bytes, flavor, null);
            try {
                printJob.print(doc, null);
                System.out.print("imprimiendo en " + services[impr]);
            } catch (PrintException ex) {
                Logger.getLogger(CImprimir.class.getName()).log(Level.SEVERE, null, ex);
                ex.printStackTrace();
            }
        } else {
            JOptionPane.showMessageDialog(null, "No esta instalada la impresora seleccionada para la impresion. \n Por favor revise la impresora en las configuraciones");
        }
    }

    public void imprimirServicioTecnico(Serviciotecnico serv, int numero, String impresora) {
        DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
        PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
        int impr = 0;
        boolean existe = false;
        for (int i = 0; i < services.length; i++) {
            if (services[i].getName().equals(impresora)) {
                impr = i;
                existe = true;
            }
        }
        if (existe) {
            String ss = "===== SOLICITUD DE SERVICIO TECNICO ====";
            String num = AgregaEspacios("Numero: " + String.valueOf(numero));
            ss = ss + num;
            String local = AgregaEspacios(configuraciones.getInstance().getConfiguracion().getNombreLocal());
            ss = ss + local;
            String propietario = AgregaEspacios(configuraciones.getInstance().getConfiguracion().getNombreDuenio());
            ss = ss + propietario;
            String ruc = AgregaEspacios("RUC:" + configuraciones.getInstance().getConfiguracion().getRuc());
            ss = ss + ruc;
            String direccion = completaLineas("Direccion:" + configuraciones.getInstance().getConfiguracion().getDireccion());
            ss = ss + direccion;
            String telefono = AgregaEspacios("Telefono:" + configuraciones.getInstance().getConfiguracion().getTelefono());
            ss = ss + telefono;
            String fecha = AgregaEspacios("Fecha:" + serv.getFecha().toLocaleString());
            ss = ss + fecha;
            String cliente = completaLineas("Cliente:" + serv.getCedulaCliente().getNombres() + " " + serv.getCedulaCliente().getApellidos());
            ss = ss + cliente;
            String ci = AgregaEspacios("CI/RUC:" + serv.getCedulaCliente().getCedula());
            ss = ss + ci;
            String telefonoCliente = AgregaEspacios("Telefono:" + serv.getCedulaCliente().getTelefono());
            ss = ss + telefonoCliente;
            ss = ss + "----------------------------------------";
            String datos = completaLineas("Datos del equipo: " + serv.getDatos().trim());
            ss = ss + datos;
            String numSer = AgregaEspacios("Numero/Serie: " + serv.getNumeroSerie().trim());
            ss = ss + numSer;
            String chip = AgregaEspacios("Chip: " + serv.getChip().trim());
            ss = ss + chip;
            String memoria = AgregaEspacios("Memoria: " + serv.getMemoria().trim());
            ss = ss + memoria;
            String fallo = completaLineas("Fallo Reportado: " + serv.getFallo().trim());
            ss = ss + fallo;
            String obser = completaLineas("Observaciones: " + serv.getObservaciones().trim());
            ss = ss + obser;
            ss = ss + "----------------------------------------";
            String mensaje = "";
            mensaje = mensaje + AgregaEspacios("LEA ESTO ES IMPORTANTE: ");
            mensaje = mensaje + completaLineas("*El costo de revision del equipo es de 4 dolares americanos");
            mensaje = mensaje + completaLineas("*Me comprometo a cancelar hasta un valor de 25 dolares por la reparacion de mi equipo sin previa notificacion");
            mensaje = mensaje + completaLineas(new StringBuilder().append("*Si el equipo no es retirado en 30 dias a partir de la fecha de ingreso, seran considerados en abandono y ").append(configuraciones.getInstance().getConfiguracion().getNombreLocal().toUpperCase()).append(" procedera al remate del equipo para cubrir gastos de operacion").toString());
            mensaje = mensaje + completaLineas("*La garantia de reparacion sobre el fallo es de 30 dias; los equipos mojados, reinstalados el sistema operativo, flasheados, con virus informatico, o software, no aplica garantia");
            ss = ss + mensaje;
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "Firma_________________________________  ";
            ss = ss + AgregaEspacios(new StringBuilder().append("Fecha: ").append(serv.getFecha().getDate()).append("/").append(serv.getFecha().getMonth() + 1).append("/").append(serv.getFecha().getYear() + 1900).toString());
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                        ";
            ss = ss + "                                       .\f";
            ss = ss.trim();
            byte[] bytes = ss.getBytes();
            DocPrintJob printJob = services[impr].createPrintJob();
            Doc doc = new SimpleDoc(bytes, flavor, null);
            try {
                printJob.print(doc, null);
                System.out.print("imprimiendo en " + services[impr]);
            } catch (PrintException ex) {
                Logger.getLogger(CImprimir.class.getName()).log(Level.SEVERE, null, ex);
                ex.printStackTrace();
            }
        } else {
            JOptionPane.showMessageDialog(null, "No esta instalada la impresora seleccionada para la impresion. \n Por favor revise la impresora en las configuraciones");
        }
    }

    public String completaLineas(String cadena) {
        int espacios = cadena.length() % 40;
        if (espacios > 0) {
            espacios = 40 - espacios;
            for (int i = 0; i < espacios; i++) {
                cadena = cadena + " ";
            }
        }
        return cadena;
    }

    public List<String> getImpresoras() {
        List impresoras = new ArrayList();
        DocFlavor docFormat = DocFlavor.INPUT_STREAM.AUTOSENSE;
        AttributeSet attributeSet = new HashAttributeSet();
        PrintService[] services = PrintServiceLookup.lookupPrintServices(docFormat, attributeSet);
        int impr = 0;
        for (int i = 0; i < services.length; i++) {
            impresoras.add(services[i].getName());
        }

        return impresoras;
    }
}
